<?php
// +-----------------------------------------------------------------------+
// |                                                                       |
// | WebFormsQA     (Question - Answer)                                    |
// | Copyright  (C) 2010                                                   |
// | Official site  www.scale-tech.ru                                      |
// | email          scale-tech@mail.ru                                     |
// | autor          Alexander Demachev                                     |
// |                                                                       |
// | This program is free software; you can redistribute it and/or modify  |
// | it under the terms of the GNU General Public License as published by  |
// | the Free Software Foundation; version 2 of the License.               |
// |                                                                       |
// | This program is distributed in the hope that it will be useful,       |
// | but WITHOUT ANY WARRANTY; without even the implied warranty of        |
// | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the         |
// | GNU General Public License for more details.                          |
// +-----------------------------------------------------------------------+

/**
 * @file view_question_page.test.php
 * @brief файл содержит код для тестирования класса ViewQuestionPage \n
 * @include view_question_page.test.php
 */

/*! @addtogroup TestWebFormsQA Tестирование проекта WebFormsQA
 *  Группа включает классы для тестирования исходного кода
 *  @{
 */

/**
 * @class ViewQuestionPageTest
 * @brief Класс для проверки методов страницы просмотра вопросов ViewQuestionPage \n
 *        Исходный код [ @ref view_question_page.test.php ]
 */
class ViewQuestionPageTest extends PHPUnit_TestCase {

    /**
     * Метод проверяет состояния страницы ответа на вопросы
     */
    function testUpdate()
    {
        require_once('smarty/smarty.class.php');
        $smarty         = new Smarty;
        $attr           = array(
            'first'          => 'string',       // имя пользователя
            'second'         => 'string'        // пароль пользователя
        );
        // путь к текущему активному шаблону
        $path_template  = "./templates/first/";
        $main_page= new MainPage($smarty, $attr, $path_template, "");

        DataAddTest::DeleteTestDataInDatabase();
        DataAddTest::AddTestDataInDatabase();

        // тестовый пользователя с административными правами
		$base   = &$GLOBALS["base"];        
        $login 	= "testUser1";
        $pass	= "testUser1";
        $email	= "test@mail.ru";
        $admin	= true;
        $data 	= compact("login", "pass", "email", "admin");
        $id		= "";
	    $this->assertFalse( $base->addUser($data, $id) );
	    $this->assertEquals(1, $id);

		/*	    
	     *    	Состояния страницы:
	     * - 0    -   начальное состояние 
	     * - 1    -   не выбрана не одна из категорий, вывод сообщения не выбрана ни одна из категорий
	     *            вывод всех вопросов во всех категориях, сначала с ответами, потом без
	     * - 2    -   категория выбрана, вывод списка вопросов выбранной категории
	     * - 3    -   в выбранной категории нет ни одного вопроса            
	     * - 4    -   не найдено ни одного вопроса
	     * - 5    -   режим поиска, ничего не найдено   
	     * - 6    -   режим поиска, длина фразы меньше 3 символов
	     * - 7    -   режим поиска, пользователю предоставляются результаты   
		 */   

        
	    
	    // код переключения на нашу тестируемую страницу
        $_GET['view_question_page'] = '';
	    
	    
        // 4    -   не найдено ни одного вопроса   
        $main_page->update();
        $state = $smarty->get_template_vars('state');
        $this->assertEquals(4, $state);
        
        // добавляю несколько вопросов, например "На каком языке программирования написан Trac"
    	ExampleQuestionDatabase::addCategoryTrac($base);

 
	    // 1    -   не выбрана не одна из категорий, вывод сообщения не выбрана ни одна из категорий
	    //          вывод всех вопросов во всех категориях, сначала с ответами, потом без
        $main_page->update();
        $state = $smarty->get_template_vars('state');
        $this->assertEquals(1, $state);
        
        $list_questions = $smarty->get_template_vars('list_questions');
        $this->assertEquals(2, sizeof($list_questions));
        
        // 2    -   категория выбрана, вывод списка вопросов выбранной категории
        $_GET['categoryID'] = '7';
        $main_page->update();
        $state = $smarty->get_template_vars('state');
        $this->assertEquals(2, $state);

        $list_questions = $smarty->get_template_vars('list_questions');
        $this->assertEquals(2, sizeof($list_questions));
        

        // 3    -   в выбранной категории нет ни одного вопроса
        $_GET['categoryID'] = '1';
        $main_page->update();
        $state = $smarty->get_template_vars('state');
        $this->assertEquals(3, $state);

        $list_questions = $smarty->get_template_vars('list_questions');
        $this->assertEquals(0, sizeof($list_questions));

        unset( $_SESSION['categoryID'] );
        unset( $_GET['categoryID'] );
    	// 5    -   режим поиска, ничего не найдено
    	$_GET['find_field'] = 'строка поиска';
        $main_page->update();
        $state = $smarty->get_template_vars('state');
        $this->assertEquals(5, $state);
        
        // 7    -   режим поиска, пользователю предоставляются результаты
        // поиск только в вопросах 
        $_GET['mode_search'] = 1;
    	$_GET['find_field'] = 'На каком языке программирования написан Trac';
        $main_page->update();
        $state = $smarty->get_template_vars('state');
        $this->assertEquals(7, $state);
        
        $list_questions = $smarty->get_template_vars('list_questions');
        $this->assertEquals(1, sizeof($list_questions));

        
        $_GET['mode_search'] = 2;
        $main_page->update();
        $state = $smarty->get_template_vars('state');
        $this->assertEquals(5, $state);
        
        $_GET['mode_search'] = 3;
        $main_page->update();
        $state = $smarty->get_template_vars('state');
        $this->assertEquals(7, $state);
        
        
        // 6    -   режим поиска, длина фразы меньше 3 символов
        $_GET['find_field'] = 'На';
        $main_page->update();
        $state = $smarty->get_template_vars('state');
        $this->assertEquals(6, $state);

        
        $_GET['mode_search'] = 1;
        $_GET['find_field'] = 'Trac написан на языке программирования Python';
        $main_page->update();
        $state = $smarty->get_template_vars('state');
        $this->assertEquals(5, $state);
        

        $_GET['mode_search'] = 2;
        $main_page->update();
        $state = $smarty->get_template_vars('state');
        $this->assertEquals(7, $state);
        
		        
        unset($_GET['view_question_page']);
        unset($_GET['find_field']);
        unset($_GET['mode_search']);
        
        unset($_GET['admin_question']);
        unset($_GET['categoryID']);
        unset($_GET['questionID']);
        unset($_GET['but_answer']);
        unset($_GET['answer']);
		unset( $_SESSION['categoryID'] );

    } // testUpdate


} // AnswerPageTest

/*! @} */

?>
